package com.xxx.springboot.service;

import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;

import java.util.concurrent.TimeUnit;

/**
 * 【redisson分布式锁】1.Redisson 分布式锁接口定义
 */
public interface DistributedLocker {
	
	/**
	 * 加锁(指定key)
	 * @param lockKey
	 * @return
	 */
	RLock lock(String lockKey);
	
	/**
	 * 加锁（带租约时间）
	 * @param lockKey
	 * @param leaseTime 租约时长，默认时间单位为秒 
	 * @return
	 */
	RLock lock(String lockKey, int leaseTime);
	
	/**
	 * 加锁(指定key和timeout和TimeUnit)
	 * @param lockKey
	 * @param unit
	 * @param timeout
	 * @return
	 */
	RLock lock(String lockKey, TimeUnit unit, int timeout);
	
	/**
	 * 尝试加锁
	 * @param lockKey
	 * @param unit
     * @param waitTime 最多等待时间
     * @param leaseTime 上锁后自动释放锁时间
	 * @return
	 */
	boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime);
	
	/**
	 * 解锁：根据lock key
	 * @param lockKey
	 */
	void unLock(String lockKey);
	
	/**
	 * 解锁：根据lock对象
	 * @param lock
	 */
	void unLock(RLock lock);
	
	/**
	 * 注入redissonClient
	 * @param redissonClient
	 */
	void setRedissonClient(RedissonClient redissonClient);
}
